home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
SGI Developer Toolbox 6.1
/
SGI Developer Toolbox 6.1 - Disc 4.iso
/
FAQs
/
SGIfaqs
/
Performer-faq
< prev
next >
Wrap
Internet Message Format
|
1994-08-01
|
23KB
Xref: odin comp.sys.sgi.misc:9155 comp.answers:4799 news.answers:20656
From: sgi-faq@viz.tamu.edu (The SGI FAQ group)
Newsgroups: comp.sys.sgi.misc,comp.answers,news.answers
Subject: SGI performer Frequently Asked Questions (FAQ)
Followup-To: comp.sys.sgi.misc
Date: 6 Apr 1994 20:12:37 GMT
Organization: Visualization Lab, Texas A&M University
Lines: 635
Expires: 4 May 1994 20:11:14 GMT
Reply-To: sgi-faq@viz.tamu.edu (The SGI FAQ group)
Originator: sgi-faq@viz
Archive-name: sgi/faq/performer
Last-modified: Tue Feb 22 11:52:23 CST 1994
SGI performer Frequently Asked Questions (FAQ)
This is one of the Silicon Graphics FAQ series, which consists of:
SGI admin FAQ - IRIX system administration
SGI apps FAQ - Applications & compilers
SGI graphics FAQ - Graphics and user environment customization
SGI hardware FAQ - Hardware
SGI misc FAQ - Introduction & miscellaneous information
SGI performer FAQ - IRIS Performer
SGI pointer FAQ - Pointer to the other FAQs
Read the misc FAQ for information about the FAQs themselves. Each FAQ
is posted to comp.sys.sgi.misc and to the news.answers and comp.answers
newsgroups (whose purpose is to store FAQs) twice per month. If you
can't find one of the FAQs with your news program, you can get it by
anonymous FTP from one of these sites:
rtfm.mit.edu:/pub/usenet/comp.sys.sgi.misc/
rtfm.mit.edu:/pub/usenet/news.answers/sgi/faq/
rtfm.mit.edu:/pub/usenet/comp.answers/sgi/faq/
viz.tamu.edu:/pub/sgi/faq/
Note that rtfm.mit.edu is home to many other FAQs and informational
documents, and is a good place to look if you can't find an answer
here. If you can't use FTP, send mail to mail-server@rtfm.mit.edu with
the command 'send usenet/news.answers/ftp-list/faq' on a line by itself
in the text, and it will send you a document describing how to FTP by
mail. You can also read a hypertext version of the FAQs at
http://www.cis.ohio-state.edu/hypertext/faq/usenet/sgi/top.html
The SGI FAQs are freely distributable and wide circulation is encouraged.
The contents are accurate as far as we know, but the usual disclaimers
apply. Please send additions and changes to sgi-faq@viz.tamu.edu.
Topics covered in this FAQ:
---------------------------
-1- What is IRIS Performer?
-2- Where can I get more technical information about IRIS Performer?
-3- Where can I get more product information about IRIS Performer?
-4- How does IRIS Performer relate to IRIS Inventor?
-5- What are the released versions of IRIS Performer?
-6- Is there a IRIS Performer file format?
-7- What database file formats can IRIS Performer read?
-8- Is there an IRIS Inventor file reader for IRIS Performer?
-9- What are the .tlf files used by the Performer Town and Village?
-10- What are the minimum requirements for using IRIS Performer?
-11- How do I make GL calls from within a IRIS Performer program?
-12- How do I overlay graphics on top of my Performer scene?
-13- What is the difference between phases FREE, FLOAT, and LOCK?
-14- Which rendering primitives does IRIS Performer support?
-15- How do I do triangle meshes in Performer?
-16- pfInit(): mmap failed for /dev/zero
-17- IRIX 5.x Bug in Performer Town or Village demos
-18- 1.0 Doc Bug in pfMakePolarSeg() man page
-19- 1.0 Doc Bug in pfDispList() man page
-20- 1.0 Doc Bug in PFPG (simple.c)
-21- 1.0 Bug in pfGetTime()
-22- 1.0 Bug in pfNodeBBox()
-23- 1.0 Bug in pfInitGfx() with Z-buffer on RealityEngine
-24- 1.0 Bug in libpfflt combineLODs()
-25- 1.0 Bug with two-sided material and pfMtlColorMode()
-26- 1.0 Bug in pfFilePath()
-27- 1.0 Bug in pfGetCurGState()
-28- 1.0 Bug in pfGetCurState()
-29- 1.0 Bug with cloned scenes
-30- 1.0 Bug intersections in collide.c
-31- 1.0 Bug with flattened pfLightPoints
-32- 1.0 Bug intersections with pfSequences
-33- 1.0 Bug intersections with non-indexed quads
-34- 1.0/1.1 Bug intersections with pfSwitch'es
-35- 1.0/1.1 Bug with pfTexture()
-36- 1.0/1.1 Bug with pfAntiAlias()
-37- 1.0/1.1 Bug with pfFlatten()
-38- 1.0/1.1 Bug with pfSequences
-39- 1.0/1.1 Bug with pfClosestPtOnPlane()
-40- 1.0/1.1 Bug on ELAN/XS with wireframe PFGS_QUADS
-41- 1.1 Bug with FP underflow
-42- 1.1 Bug with Multipipe Onyx
----------------------------------------------------------------------
Subject: -1- What is IRIS Performer?
Date: 06 Oct 93 00:00:01 EST
IRIS Performer is a software development environment that supports
programmers implementing high performance graphics applications on
Silicon Graphics products. It offers both high level facilities for
visual simulation and virtual reality tasks and an application-neutral
high-performance hardware-oriented graphics toolkit.
The outer application specific layer of IRIS Performer implements the
tasks needed by visual simulation applications: it performs culling so
that only potentially visable geometry is sent to the graphics
hardware; it controls multiple display channels; it provides fast
intersection tests with simulation databases; and most importantly, it
orchestrates all of this in parallel with rendering on multiple
processor IRIS systems.
The lower-level rendering portion of IRIS Performer is designed for
maximum performance: its efficient data structures reflect the details
of CPU, cache, and memory system architectures; its tuned rendering
loops convert the system CPU into an optimized data movement engine;
and its optimized state management system optimizes hardware
utilization.
IRIS Performer provides a high-performance portability path across the
Silicon Graphics product line. The low level library is implemented as
a hardware-specific shared library, so applications based on IRIS
Performer can achieve peak performance on graphics systems from Elan to
RealityEngine2 without changes or recompilation.
The product includes a programmer's guide and printed man pages, as
well as on-line man pages, test and demonstration programs, and
complete real-time visual simulation applications. These applications
are provided in source form as an examples of how to build real-time
simulation systems using IRIS Performer. Also included are several
databases in FLIGHT and Wavefront "OBJ" format and source code for
database readers that can load them.
------------------------------
Subject: -2- Where can I get more technical information about IRIS
Performer?
Date: 06 Oct 93 00:00:01 EST
One method is to join the IRIS Performer mailing list.
The list is intended to be an unmoderated, free-form discussion of IRIS
Performer with issues both technical and non-technical; and to provide
feedback to Silicon Graphics about the product. Much like the
comp.sys.sgi.* newsgroups, it is not an official support channel but is
monitored by several interested SGI employees familiar with the
toolkit.
To become a subscriber to the IRIS Performer mailing list you must send
email to:
info-performer-request@sgi.com
New subscribers are added "by hand". Once your request is processed
you will receive submission/posting instructions, some guidelines, and
a current copy of the Performer Frequently-Asked-Questions (FAQ) list.
------------------------------
Subject: -3- Where can I get more product information about IRIS
Performer?
Date: 06 June 93 00:00:01 EST
For product information about IRIS Performer or SGI Visual Simulation
issues contact John Burwell <johnnyb@asd.sgi.com>. To learn about SGI
Virtual Reality solutions contact Joshua Mogal (415) 390-1460
<mogal@asd.sgi.com>. To just give in and buy a copy ($495 US) call SGI
Direct (see the misc FAQ for phone numbers) or to have both a
demonstration and a presentation call your local SGI sales office.
------------------------------
Subject: -4- How does IRIS Performer relate to IRIS Inventor?
Date: 26 June 93 00:00:01 EST
The short answer is, Performer was designed for vis-sim, while Inventor
was designed to be more general purpose.
IRIS Performer is for developers who need to extract maximum
performance from SGI machines for visual simulation, virtual reality,
game development, and high-end CAD systems. Often these applications
need multi-processor Onyx systems with multiple RealityEngine pipelines
with a high degree of parallelism and running at fixed frame rates.
Inventor is designed for maximum programmer productivity when writing
other kinds of 3D applications, like modelling, animation,
visualization, etc.
Both toolkits are general purpose enough that they could be extended
into the domain of the other, but the question you should consider is
"what is the *fundamental* goal of my graphics development?" If it's
portability to non-SGI systems, easy X-window system integration, or
handy graphic widgets, IRIS Inventor is for you. If it's brochure-
level performance in advanced graphic applications for the specific
domains listed above, then IRIS Performer would be the likely tool.
------------------------------
Subject: -5- What are the released versions of IRIS Performer?
Date: 06 Oct 93 00:00:01 EST
IRIS Performer 1.0: For machines running IRIX 4.x only
IRIS Performer 1.1: For machines running IRIX 5.x only
IRIS Performer 1.2 is currently in an early stage of beta testing.
It will run on machines running either IRIX 4.x or IRIX 5.x
------------------------------
Subject: -6- Is there a IRIS Performer file format?
Date: 26 Oct 93 00:00:01 EST
Not at this time. A binary file format is a desired feature for a
future release. Currently, IRIS Performer has functionality to load
other vendors' database files at run time.
------------------------------
Subject: -7- What database file formats can IRIS Performer read?
Date: 26 Oct 93 00:00:01 EST
IRIS Performer 1.0 and 1.1 include database loaders for MultiGen v11
"flt", SGI "bin", and SGI "obj" formats.
IRIS Performer 1.2 will include loading utilities and file loaders for
additional file formats, including Coryphaeus "dwb", MultiGen v12
"flt", AutoCAD "dxf", and Wavefront "obj".
You can get a MultiGen 12 version of LoadFlt() for Performer 1.0 and
1.1 by contacting Norm Miller at Software Systems, the makers of
MultiGen.
Mr. Norm Miller
Software Systems
1884 The Alameda
San Jose, CA 95126
P: (408) 247-4326
F: (408) 247-4329
multigen!norm@uunet.UU.NET
------------------------------
Subject: -8- Is there an IRIS Inventor file reader for IRIS
Performer?
Date: 26 Oct 93 00:00:01 EST
Not at this time. An IRIS Inventor file reader is a planned
feature for Performer 1.2.
------------------------------
Subject: -9- What are the .tlf files used by the Performer Town and
Village?
Date: 26 Oct 93 00:00:01 EST
They are encrypted .flt files of the Town and Village database. Only
the "demo" version of perfly can read these files.
Unencrypted versions of the Town and Village databases are planned to
be included in Performer 1.2.
------------------------------
Subject: -10- What are the minimum requirements for using IRIS
Performer?
Date: 06 June 93 00:00:01 EST
IRIS Performer requires IRIX 4.0.5 or later. Because IRIX 4.0.5F added
several new Graphics Library (GL) calls to support RealityEngine
features, any application that uses GL routines or tokens found only in
4.0.5F and later, will not run properly under 4.0.5C and earlier
releases.
------------------------------
Subject: -11- How do I make GL calls from within a IRIS Performer
program?
Date: 26 Oct 93 00:00:01 EST
GL calls can only be made from a process that has a GL context. In
multi-process Performer applications only the draw process has GL
context, so you must make your GL calls in a function called in the
draw process.
The pipe initialization callback, draw function callback, and node draw
callbacks are all executed in the draw process.
In an application that only will ever run single-process, GL calls can
be made from anywhere in the program.
To set up a pipe initialization callback, see the pfInitPipe() man
page. To set up a draw function callback, see the pfChanDrawFunc() man
page. To set up a node draw callback, see the pfNodeTravFuncs() man
page.
------------------------------
Subject: -12- How do I overlay graphics on top of my Performer scene?
Date: 06 Oct 93 00:00:01 EST
Typically this is done to implement a heads-up display (HUD).
In the draw function callback, the basic algorithm is:
save state with pfPushState()
disable textures, fog, & lighting with pfBasicState()
save & clear projection matrix
ortho2()
save & clear modelling matrix
draw()
restore modelling matrix
restore projection matrix
restore state with pfPopState()
Or, you can draw your static info in the overlay planes and only redraw
it when the window receives a REDRAW event (moved, resized, etc.).
Changing between drawing to the overlays and drawing to regular
bitplanes takes a big hit.
For things that need to be updated real-time, draw() would consist of:
zfunction(ZF_ALWAYS);
zwritemask(0x0);
draw HUD stuff
zfunction(ZF_LEQUAL);
zwritemask(0xffffffff);
------------------------------
Subject: -13- What is the difference between phases FREE, FLOAT, and
LOCK?
Date: 26 Oct 93 00:00:01 EST
PFPHASE_FREE_RUN wakes the application and draw processes up on the
next video field boundary after the draw finishes. i.e. it's
Performer's version of the usual run as-fast-as-I-can or
as-slow-as-I-must mode that most simple graphics programs use.
PFPHASE_FLOAT wakes the application up only on frame boundaries, i.e.
time = n*(1/frame_rate). However, the draw process "floats" with
respect to the frame rate and wakes up on the next possible field
boundary and then does a swapbuffers() when it's done, regardless of
whether it finished drawing in time for the desired frame rate. Hence
you see every frame that's drawn to the backbuffer, but it may not
appear at exactly the time for which it was planned. If you never
frame extend, it behaves like PFPHASE_FIXED. Latency is variable.
PFPHASE_LOCK wakes the application and draw up only on frame boundaries
and only swaps on frame boundaries. The advantage is that each new
image always appears at precisely the time for which it was rendered.
The disadvantage is that if the draw runs even slightly over a frame
time, you skip that entire frame and are stuck with an outdated picture
for a frame. Latency is fixed.
For more information see the pfPhase() man page or section 7.1.2 of the
PFPG.
------------------------------
Subject: -14- Which rendering primitives does IRIS Performer support?
Date: 06 Oct 93 00:00:01 EST
Points (PFGS_POINTS),
Independent line segments (PFGS_LINES),
connected line strips (PFGS_LINESTRIPS),
Independent Triangles (PFGS_TRIS),
Connected triangle strips (PFGS_TRISTRIPS),
Independent quadrilaterals (PFGS_QUADS).
------------------------------
Subject: -15- How do I do triangle meshes in Performer?
Date: 06 Oct 93 00:00:01 EST
You must change your triangle meshes to triangle strips by hand. In
Performer 1.2, pfuMeshGSet (from libpfutil) will do this for you.
------------------------------
Subject: -16- pfInit(): mmap failed for /dev/zero
Date: 26 Oct 93 00:00:01 EST
This means that you tried to run a Performer 1.0 application (such as a
4.x version of perfly) on a machine running IRIX 5.x. Virtual memory
management is different in IRIX 5.x. In order for your program to work
properly you must:
% setenv PFTMPDIR /usr/tmp
------------------------------
Subject: -17- IRIX 5.x Bug in Performer Town or Village demos
Date: 26 Oct 93 00:00:01 EST
It was reported that perfly would cause an Onyx RE or VTX running IRIX
5.0 to hang. This was fixed in 5.0.1.
In 5.0.1, perfly would generate floating point exceptions due to a bug
in the font manager library (libfm). This was fixed in 5.1.
------------------------------
Subject: -18- 1.0 Doc Bug in pfMakePolarSeg() man page
Date: 26 Oct 93 00:00:01 EST
The man page for pfMakePolarSeg contradicts itself with respect to the
meaning of azimuth and elevation. The correct paragraph should be:
pfMakePolarSeg sets dst to the segment which starts at pos and has
length length and points in the direction specified by azi and
elev. azi specifies the azimuth (or heading), which is the angle
which the projection of the segment in the X-Y plane makes with the
+Y axis. elev specifies the elevation (or pitch), the angle with
respect to the X-Y plane. The positive Y axis is azi=0 and
elev=0. Azimuth follows the right hand rule about the +Z azis,
e.g. - +90 degrees is the -X axis. Similarly, elevation follows
the right hand rule about the X axis, e.g. - +90 degrees is the +Z
axis.
Note that in IRIS Performer 1.0, an azi and elev of 0.0 is equivalent
to the +X axis while in 1.1, this has been changed to the +Y axis.
------------------------------
Subject: -19- 1.0 Doc Bug in pfDispList() man page
Date: 26 Oct 93 00:00:01 EST
The pfDispList man page says the size argument is in bytes; it should
say words.
------------------------------
Subject: -20- 1.0 Doc Bug in PFPG (simple.c)
Date: 26 Oct 93 00:00:01 EST
The program simple.c in the IRIS Performer Programming Guide (PFPG)
does not bind a light and draws a black image on Elan systems. The
corrected version, which creates and binds a light in the pipe
initialization callback, is in /usr/src/Performer/src/pguide
------------------------------
Subject: -21- 1.0 Bug in pfGetTime()
Date: 26 Oct 93 00:00:01 EST
In 1.0, pfGetTime() would occasionally return bad values (off by 4000+
seconds) on Indigo2 and machines without a fast counter, e.g.
PowerSeries/IO2.
There was no workaround.
------------------------------
Subject: -22- 1.0 Bug in pfNodeBBox()
Date: 26 Oct 93 00:00:01 EST
pfNodeBBox did not set the bounding box of a node. A symptom was that
the bounding boxes of the node would not change when modifying a parent
pfDCS.
The workaround was to OR the value 0x0010 into the mode, e.g.-
pfNodeBBox(node, &bbox, PFN_BMODE_STATIC | 0x0010);
------------------------------
Subject: -23- 1.0 Bug in pfInitGfx() with Z-buffer on RealityEngine
Date: 26 Oct 93 00:00:01 EST
pfInitGfx on RealityEngines would call lsetdepth(0x0, 0x0), essentially
disabling zbuffering.
The workaround was to call lsetdepth explicitly after pfInitGfx, in the
pipe initialization callback.
------------------------------
Subject: -24- 1.0 Bug in libpfflt combineLODs()
Date: 26 Oct 93 00:00:01 EST
combineLODs() in the MultiGen .flt converter (in file hier.c) did not
set the LOD center of combined LODs. This would result in strange LOD
behavior for LODs which were not modelled about the origin.
------------------------------
Subject: -25- 1.0 Bug with two-sided material and pfMtlColorMode()
Date: 26 Oct 93 00:00:01 EST
Applying a back-sided material which had a color mode (pfMtlColorMode),
would set the GL lmcolor mode. Since IrisGL does not support lmcolor
for back-sided materials, this could have caused front-sided materials
to use an improper lmcolor mode.
------------------------------
Subject: -26- 1.0 Bug in pfFilePath()
Date: 26 Oct 93 00:00:01 EST
pfFilePath would exit with a FATAL error if it was called twice.
------------------------------
Subject: -27- 1.0 Bug in pfGetCurGState()
Date: 26 Oct 93 00:00:01 EST
pfGetCurGState returned a pfGeoState which was the top of the state
stack rather than the most recently applied pfGeoState.
------------------------------
Subject: -28- 1.0 Bug in pfGetCurState()
Date: 26 Oct 93 00:00:01 EST
pfGetCurState returned a pfGeoState which was the top of the state
stack rather than the current pfState.
------------------------------
Subject: -29- 1.0 Bug with cloned scenes
Date: 26 Oct 93 00:00:01 EST
pfClone()'ed scenes were not properly cleaned and did not properly
propagate updates. In particular, cloned pfSequences did not work.
------------------------------
Subject: -30- 1.0 Bug intersections in collide.c
Date: 26 Oct 93 00:00:01 EST
collide.c was shipped with a hardwired intersection mode which turned
off intersection caching, substantially reducing intersection
performance.
------------------------------
Subject: -31- 1.0 Bug with flattened pfLightPoints
Date: 26 Oct 93 00:00:01 EST
pfFlatten()'ed pfLightPoints were broken for multiprocessing modes when
the application and cull processes were separate.
------------------------------
Subject: -32- 1.0 Bug intersections with pfSequences
Date: 26 Oct 93 00:00:01 EST
Intersections with pfSequences could sometimes turn them off
(PFSEQ_STOP).
------------------------------
Subject: -33- 1.0 Bug intersections with non-indexed quads
Date: 26 Oct 93 00:00:01 EST
Intersection caching for non-indexed quads was broken and could case a
core dump when intersection with pfGeoSets of this type.
------------------------------
Subject: -34- 1.0/1.1 Bug intersections with pfSwitch'es
Date: 26 Oct 93 00:00:01 EST
Intersections with pfSwitch'es whose value is PFSWITCH_OFF could cause
a core dump.
------------------------------
Subject: -35- 1.0/1.1 Bug with pfTexture()
Date: 26 Oct 93 00:00:01 EST
On RealityEngine systems, EXTERNAL format was ignored.
------------------------------
Subject: -36- 1.0/1.1 Bug with pfAntiAlias()
Date: 26 Oct 93 00:00:01 EST
On RealityEngine systems, pfAntialias(PFAA_OFF) did not turn off
multisampling.
------------------------------
Subject: -37- 1.0/1.1 Bug with pfFlatten()
Date: 26 Oct 93 00:00:01 EST
pfFlatten did not dirty bounding spheres of flattened nodes so they had
improper bounds and would not cull correctly.
------------------------------
Subject: -38- 1.0/1.1 Bug with pfSequences
Date: 26 Oct 93 00:00:01 EST
pfSequences: PFSEQ_RESUME ignored children's display times and drew
subsequent children for 1 frame only.
------------------------------
Subject: -39- 1.0/1.1 Bug with pfClosestPtOnPlane()
Date: 26 Oct 93 00:00:01 EST
pfClosestPtOnPlane returned wrong result. Also, the man page had the
wrong prototype.
------------------------------
Subject: -40- 1.0/1.1 Bug on ELAN/XS with wireframe PFGS_QUADS
Date: 26 Oct 93 00:00:01 EST
On EXPRESS Graphics platforms (XS, XS24, ELAN, etc), wireframe quads
have a stray line from one vertex to "infinity" when displayed in
wireframe mode.
------------------------------
Subject: -41- 1.1 Bug with FP underflow
Date: 26 Oct 93 00:00:01 EST
The cull process could encounter an FP underflow that could
periodically affect cull performance.
------------------------------
Subject: -42- 1.1 Bug with Multipipe Onyx
Date: 26 Oct 93 00:00:01 EST
There is a bug in the 1.1 multipipe code. The symptom is a core dump
and an error like:
Performer Fatal (4):pfFree() pointer 0x9c9350 not from pfMalloc
The workaround is to do the following after you've created a channel
with pfNewChan:
((long**)chan)[3] = NULL;
------------------------------
End of sgi/faq/performer Digest
******************************
--
The SGI FAQ group sgi-faq@viz.tamu.edu
Finger us for info on the SGI FAQs, or look in viz.tamu.edu:/pub/sgi.